import { USER_LOGIN_SUCCESS, USER_RESET, USER_ROLES } from '../actions/contants'

/**
 * 初始状态
 */
const initialState = {
  userInfo: null, // 用户基本信息
  token: null, // token
  roles: null, // 用户角色
}

/**
 * 用于同步更新与用户登录状态相关的状态数据
 * @param {*} state 更新前的旧状态数据
 * @param {*} action 普通对象，描述如何更新状态，有 type 与 payload 属性
 * @returns 返回更新后的新的状态数据
 */
const reducer = (state = initialState, { type, payload }) => {
  // state 拷贝副本
  let copy = JSON.parse(JSON.stringify(state))
  // 根据 type 判断具体如何更新状态
  switch (type) {
  case USER_LOGIN_SUCCESS: // 登录成功
    copy.userInfo = payload.userInfo
    copy.token = payload.token
    return copy
  case USER_RESET: // 重置
    copy.userInfo = null
    copy.token = null
    copy.roles = null
    return copy
  case USER_ROLES: // 用户角色保存
    copy.roles = payload.roles
    return copy
  default:
    return state
  }
}

export default reducer
